{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/lib/python3.6/site-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n",
      "  from ._conv import register_converters as _register_converters\n",
      "Using TensorFlow backend.\n"
     ]
    }
   ],
   "source": [
    "import os\n",
    "from keras.datasets import imdb\n",
    "from keras.preprocessing import sequence, text\n",
    "from keras.layers import Flatten, Dense, Embedding, LSTM\n",
    "from keras.models import Sequential\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "max_features = 10000 #作为特征的单词个数\n",
    "max_len = 100 #100个单词后截断文本\n",
    "training_samples = 1000\n",
    "validation_samples = 100"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "imdb_dir = './aclImdb/'\n",
    "train_dir = os.path.join(imdb_dir, 'train')\n",
    "glove_dir = './glove.6B/'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "labels = []\n",
    "texts = []\n",
    "\n",
    "for label_type in ['neg', 'pos']:\n",
    "    dir_name = os.path.join(train_dir, label_type)\n",
    "    for fname in os.listdir(dir_name):\n",
    "        if fname[-4:] == '.txt':\n",
    "            f = open(os.path.join(dir_name, fname))\n",
    "            texts.append(f.read())\n",
    "            f.close()\n",
    "            if label_type == 'neg':\n",
    "                labels.append(0)\n",
    "            else:\n",
    "                labels.append(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fond 88582 unique tokens.\n"
     ]
    }
   ],
   "source": [
    "tokenizer = text.Tokenizer(num_words=max_features)\n",
    "tokenizer.fit_on_texts(texts)\n",
    "sequences = tokenizer.texts_to_sequences(texts)\n",
    "\n",
    "word_index = tokenizer.word_index\n",
    "print (\"Fond %s unique tokens.\" % len(word_index))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Shape of data tensor (25000, 100)\n",
      "Shape of labels tensor (25000,)\n"
     ]
    }
   ],
   "source": [
    "data = sequence.pad_sequences(sequences, maxlen=max_len)\n",
    "labels = np.asarray(labels)\n",
    "\n",
    "print ('Shape of data tensor', data.shape)\n",
    "print ('Shape of labels tensor', labels.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "indices = np.arange(data.shape[0])\n",
    "np.random.shuffle(indices)\n",
    "data = data[indices]\n",
    "labels = labels[indices]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "x_train = data[:training_samples]\n",
    "y_train = labels[:training_samples]\n",
    "\n",
    "x_val = data[training_samples:training_samples+validation_samples]\n",
    "y_val = labels[training_samples:training_samples+validation_samples]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Found 400000 word vectors.\n"
     ]
    }
   ],
   "source": [
    "embedding_index = {}\n",
    "f = open(os.path.join(glove_dir, 'glove.6B.100d.txt'))\n",
    "\n",
    "for line in f:\n",
    "    values = line.split()\n",
    "    word = values[0]\n",
    "    coefs = np.asarray(values[1:], dtype='float32')\n",
    "    embedding_index[word] = coefs\n",
    "    \n",
    "f.close()\n",
    "\n",
    "print ('Found %s word vectors.' % len(embedding_index))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "embedding_dim = 100\n",
    "\n",
    "embedding_matrix = np.zeros((max_features, embedding_dim))\n",
    "for word, i in word_index.items():\n",
    "    if i < max_features:\n",
    "        embedding_vector = embedding_index.get(word)\n",
    "        if embedding_vector is not None:\n",
    "            embedding_matrix[i] = embedding_vector"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "embedding_5 (Embedding)      (None, None, 100)         1000000   \n",
      "_________________________________________________________________\n",
      "lstm_3 (LSTM)                (None, 128)               117248    \n",
      "_________________________________________________________________\n",
      "dense_5 (Dense)              (None, 1)                 129       \n",
      "=================================================================\n",
      "Total params: 1,117,377\n",
      "Trainable params: 1,117,377\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "model = Sequential()\n",
    "\n",
    "model.add(Embedding(max_features,100))\n",
    "model.add(LSTM(128))\n",
    "model.add(Dense(1, activation='sigmoid'))\n",
    "model.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [],
   "source": [
    "model.layers[0].set_weights([embedding_matrix])\n",
    "model.layers[0].trainable = False"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 1000 samples, validate on 100 samples\n",
      "Epoch 1/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.6950 - acc: 0.5440 - val_loss: 0.6536 - val_acc: 0.6000\n",
      "Epoch 2/50\n",
      "1000/1000 [==============================] - 2s 2ms/step - loss: 0.6526 - acc: 0.6230 - val_loss: 0.6634 - val_acc: 0.6200\n",
      "Epoch 3/50\n",
      "1000/1000 [==============================] - 2s 2ms/step - loss: 0.6240 - acc: 0.6460 - val_loss: 1.1758 - val_acc: 0.4700\n",
      "Epoch 4/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.6085 - acc: 0.6840 - val_loss: 0.6033 - val_acc: 0.6500\n",
      "Epoch 5/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.5756 - acc: 0.7000 - val_loss: 0.6407 - val_acc: 0.6100\n",
      "Epoch 6/50\n",
      "1000/1000 [==============================] - 2s 2ms/step - loss: 0.5519 - acc: 0.7150 - val_loss: 0.5563 - val_acc: 0.7000\n",
      "Epoch 7/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.5215 - acc: 0.7360 - val_loss: 0.6906 - val_acc: 0.6200\n",
      "Epoch 8/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.5015 - acc: 0.7640 - val_loss: 0.6357 - val_acc: 0.6300\n",
      "Epoch 9/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.4729 - acc: 0.7670 - val_loss: 0.5976 - val_acc: 0.6600\n",
      "Epoch 10/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.4156 - acc: 0.8080 - val_loss: 0.6468 - val_acc: 0.6600\n",
      "Epoch 11/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.3976 - acc: 0.8270 - val_loss: 0.6734 - val_acc: 0.7200\n",
      "Epoch 12/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.3310 - acc: 0.8650 - val_loss: 0.8363 - val_acc: 0.6200\n",
      "Epoch 13/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.3030 - acc: 0.8700 - val_loss: 0.6455 - val_acc: 0.7100\n",
      "Epoch 14/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.2773 - acc: 0.8930 - val_loss: 0.7512 - val_acc: 0.6600\n",
      "Epoch 15/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.2085 - acc: 0.9180 - val_loss: 0.7906 - val_acc: 0.6500\n",
      "Epoch 16/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.1811 - acc: 0.9340 - val_loss: 0.9145 - val_acc: 0.6200\n",
      "Epoch 17/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.1607 - acc: 0.9420 - val_loss: 0.7856 - val_acc: 0.6800\n",
      "Epoch 18/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.1077 - acc: 0.9680 - val_loss: 0.9920 - val_acc: 0.6500\n",
      "Epoch 19/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.1029 - acc: 0.9710 - val_loss: 0.8542 - val_acc: 0.7000\n",
      "Epoch 20/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0815 - acc: 0.9760 - val_loss: 1.0494 - val_acc: 0.6500\n",
      "Epoch 21/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0589 - acc: 0.9840 - val_loss: 1.3043 - val_acc: 0.6700\n",
      "Epoch 22/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0698 - acc: 0.9810 - val_loss: 1.2838 - val_acc: 0.6600\n",
      "Epoch 23/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0787 - acc: 0.9780 - val_loss: 1.3729 - val_acc: 0.6300\n",
      "Epoch 24/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0389 - acc: 0.9930 - val_loss: 1.1286 - val_acc: 0.6300\n",
      "Epoch 25/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0486 - acc: 0.9850 - val_loss: 1.4548 - val_acc: 0.6900\n",
      "Epoch 26/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0794 - acc: 0.9730 - val_loss: 1.0600 - val_acc: 0.6500\n",
      "Epoch 27/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0133 - acc: 0.9980 - val_loss: 1.0198 - val_acc: 0.7300\n",
      "Epoch 28/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0942 - acc: 0.9760 - val_loss: 1.3113 - val_acc: 0.6400\n",
      "Epoch 29/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0268 - acc: 0.9920 - val_loss: 1.1839 - val_acc: 0.6800\n",
      "Epoch 30/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0158 - acc: 0.9970 - val_loss: 1.2049 - val_acc: 0.6800\n",
      "Epoch 31/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0515 - acc: 0.9870 - val_loss: 1.1098 - val_acc: 0.6800\n",
      "Epoch 32/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0140 - acc: 0.9980 - val_loss: 1.0766 - val_acc: 0.6900\n",
      "Epoch 33/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0257 - acc: 0.9950 - val_loss: 1.3462 - val_acc: 0.6300\n",
      "Epoch 34/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0182 - acc: 0.9920 - val_loss: 1.1900 - val_acc: 0.7600\n",
      "Epoch 35/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0198 - acc: 0.9940 - val_loss: 1.1489 - val_acc: 0.7300\n",
      "Epoch 36/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0024 - acc: 1.0000 - val_loss: 1.3936 - val_acc: 0.7000\n",
      "Epoch 37/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0652 - acc: 0.9750 - val_loss: 1.1349 - val_acc: 0.6700\n",
      "Epoch 38/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0048 - acc: 0.9990 - val_loss: 1.2322 - val_acc: 0.7400\n",
      "Epoch 39/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0310 - acc: 0.9900 - val_loss: 1.1221 - val_acc: 0.7100\n",
      "Epoch 40/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0054 - acc: 0.9990 - val_loss: 1.4384 - val_acc: 0.6500\n",
      "Epoch 41/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0156 - acc: 0.9960 - val_loss: 1.3430 - val_acc: 0.6800\n",
      "Epoch 42/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0141 - acc: 0.9980 - val_loss: 1.1977 - val_acc: 0.6800\n",
      "Epoch 43/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0026 - acc: 1.0000 - val_loss: 1.3545 - val_acc: 0.7400\n",
      "Epoch 44/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0351 - acc: 0.9910 - val_loss: 1.3042 - val_acc: 0.7100\n",
      "Epoch 45/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0061 - acc: 0.9990 - val_loss: 1.3106 - val_acc: 0.7300\n",
      "Epoch 46/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0185 - acc: 0.9950 - val_loss: 1.3548 - val_acc: 0.6800\n",
      "Epoch 47/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0172 - acc: 0.9940 - val_loss: 1.2800 - val_acc: 0.7100\n",
      "Epoch 48/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0011 - acc: 1.0000 - val_loss: 1.4178 - val_acc: 0.7400\n",
      "Epoch 49/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 2.3480e-04 - acc: 1.0000 - val_loss: 1.5385 - val_acc: 0.7400\n",
      "Epoch 50/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0411 - acc: 0.9880 - val_loss: 1.1829 - val_acc: 0.7200\n"
     ]
    }
   ],
   "source": [
    "model.compile(optimizer='rmsprop', loss = 'binary_crossentropy', metrics=['acc'])\n",
    "history = model.fit(x_train, y_train, epochs=50, batch_size=32, validation_data=(x_val, y_val))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "embedding_6 (Embedding)      (None, None, 100)         1000000   \n",
      "_________________________________________________________________\n",
      "lstm_ln_3 (LSTM_LN)          (None, 128)               117248    \n",
      "_________________________________________________________________\n",
      "dense_6 (Dense)              (None, 1)                 129       \n",
      "=================================================================\n",
      "Total params: 1,117,377\n",
      "Trainable params: 1,117,377\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "# https://github.com/cleemesser/keras-layer-norm-work\n",
    "from lstm_ln import LSTM_LN\n",
    "model_ln = Sequential()\n",
    "\n",
    "model_ln.add(Embedding(max_features,100))\n",
    "model_ln.add(LSTM_LN(128))\n",
    "model_ln.add(Dense(1, activation='sigmoid'))\n",
    "model_ln.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [],
   "source": [
    "model_ln.layers[0].set_weights([embedding_matrix])\n",
    "model_ln.layers[0].trainable = False"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 1000 samples, validate on 100 samples\n",
      "Epoch 1/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.6853 - acc: 0.5650 - val_loss: 0.6708 - val_acc: 0.6100\n",
      "Epoch 2/50\n",
      "1000/1000 [==============================] - 2s 2ms/step - loss: 0.6513 - acc: 0.6120 - val_loss: 0.7009 - val_acc: 0.5500\n",
      "Epoch 3/50\n",
      "1000/1000 [==============================] - 2s 2ms/step - loss: 0.6414 - acc: 0.6320 - val_loss: 0.6445 - val_acc: 0.6000\n",
      "Epoch 4/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.6099 - acc: 0.6820 - val_loss: 0.6467 - val_acc: 0.6300\n",
      "Epoch 5/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.5900 - acc: 0.6860 - val_loss: 0.6069 - val_acc: 0.6400\n",
      "Epoch 6/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.5420 - acc: 0.7360 - val_loss: 0.6009 - val_acc: 0.6200\n",
      "Epoch 7/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.5509 - acc: 0.7260 - val_loss: 0.6277 - val_acc: 0.6100\n",
      "Epoch 8/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.5245 - acc: 0.7460 - val_loss: 0.5441 - val_acc: 0.7000\n",
      "Epoch 9/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.4430 - acc: 0.7870 - val_loss: 0.5426 - val_acc: 0.7300\n",
      "Epoch 10/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.4038 - acc: 0.8200 - val_loss: 0.5239 - val_acc: 0.7300\n",
      "Epoch 11/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.3594 - acc: 0.8480 - val_loss: 0.5603 - val_acc: 0.7300\n",
      "Epoch 12/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.3735 - acc: 0.8420 - val_loss: 0.6089 - val_acc: 0.7400\n",
      "Epoch 13/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.3462 - acc: 0.8520 - val_loss: 0.5950 - val_acc: 0.7800\n",
      "Epoch 14/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.2432 - acc: 0.9030 - val_loss: 0.6140 - val_acc: 0.7600\n",
      "Epoch 15/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.2016 - acc: 0.9220 - val_loss: 0.6329 - val_acc: 0.7600\n",
      "Epoch 16/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.1656 - acc: 0.9440 - val_loss: 0.6525 - val_acc: 0.7500\n",
      "Epoch 17/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.1571 - acc: 0.9490 - val_loss: 0.6253 - val_acc: 0.7700\n",
      "Epoch 18/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.1087 - acc: 0.9660 - val_loss: 0.8192 - val_acc: 0.7400\n",
      "Epoch 19/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0661 - acc: 0.9830 - val_loss: 0.8029 - val_acc: 0.7900\n",
      "Epoch 20/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0436 - acc: 0.9890 - val_loss: 0.8571 - val_acc: 0.7600\n",
      "Epoch 21/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0437 - acc: 0.9910 - val_loss: 1.0149 - val_acc: 0.6900\n",
      "Epoch 22/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0923 - acc: 0.9660 - val_loss: 0.7828 - val_acc: 0.7200\n",
      "Epoch 23/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0400 - acc: 0.9950 - val_loss: 1.0930 - val_acc: 0.7500\n",
      "Epoch 24/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0303 - acc: 0.9930 - val_loss: 0.9427 - val_acc: 0.7600\n",
      "Epoch 25/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0089 - acc: 1.0000 - val_loss: 1.0231 - val_acc: 0.8000\n",
      "Epoch 26/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0034 - acc: 1.0000 - val_loss: 1.0675 - val_acc: 0.7800\n",
      "Epoch 27/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0022 - acc: 1.0000 - val_loss: 1.0892 - val_acc: 0.7800\n",
      "Epoch 28/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0016 - acc: 1.0000 - val_loss: 1.1086 - val_acc: 0.8000\n",
      "Epoch 29/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 0.0011 - acc: 1.0000 - val_loss: 1.1501 - val_acc: 0.8000\n",
      "Epoch 30/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 9.0344e-04 - acc: 1.0000 - val_loss: 1.1917 - val_acc: 0.8100\n",
      "Epoch 31/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 7.5508e-04 - acc: 1.0000 - val_loss: 1.2196 - val_acc: 0.8100\n",
      "Epoch 32/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 6.5683e-04 - acc: 1.0000 - val_loss: 1.2348 - val_acc: 0.8100\n",
      "Epoch 33/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 5.6970e-04 - acc: 1.0000 - val_loss: 1.2778 - val_acc: 0.8000\n",
      "Epoch 34/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 5.0180e-04 - acc: 1.0000 - val_loss: 1.2893 - val_acc: 0.8000\n",
      "Epoch 35/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 4.4674e-04 - acc: 1.0000 - val_loss: 1.3107 - val_acc: 0.8000\n",
      "Epoch 36/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 4.0122e-04 - acc: 1.0000 - val_loss: 1.3268 - val_acc: 0.8000\n",
      "Epoch 37/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 3.6563e-04 - acc: 1.0000 - val_loss: 1.3434 - val_acc: 0.8000\n",
      "Epoch 38/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 3.3368e-04 - acc: 1.0000 - val_loss: 1.3662 - val_acc: 0.8000\n",
      "Epoch 39/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 3.0482e-04 - acc: 1.0000 - val_loss: 1.3695 - val_acc: 0.8000\n",
      "Epoch 40/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 2.8098e-04 - acc: 1.0000 - val_loss: 1.3882 - val_acc: 0.8000\n",
      "Epoch 41/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 2.6087e-04 - acc: 1.0000 - val_loss: 1.3872 - val_acc: 0.8000\n",
      "Epoch 42/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 2.3998e-04 - acc: 1.0000 - val_loss: 1.4231 - val_acc: 0.8000\n",
      "Epoch 43/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 2.2278e-04 - acc: 1.0000 - val_loss: 1.4190 - val_acc: 0.8000\n",
      "Epoch 44/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 2.0758e-04 - acc: 1.0000 - val_loss: 1.4338 - val_acc: 0.8000\n",
      "Epoch 45/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 1.9561e-04 - acc: 1.0000 - val_loss: 1.4483 - val_acc: 0.8000\n",
      "Epoch 46/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 1.8177e-04 - acc: 1.0000 - val_loss: 1.4434 - val_acc: 0.8000\n",
      "Epoch 47/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 1.7079e-04 - acc: 1.0000 - val_loss: 1.4641 - val_acc: 0.8000\n",
      "Epoch 48/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 1.6030e-04 - acc: 1.0000 - val_loss: 1.4660 - val_acc: 0.8000\n",
      "Epoch 49/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 1.5087e-04 - acc: 1.0000 - val_loss: 1.4743 - val_acc: 0.8000\n",
      "Epoch 50/50\n",
      "1000/1000 [==============================] - 3s 3ms/step - loss: 1.4265e-04 - acc: 1.0000 - val_loss: 1.4828 - val_acc: 0.8000\n"
     ]
    }
   ],
   "source": [
    "model_ln.compile(optimizer='adam', loss = 'binary_crossentropy', metrics=['acc'])\n",
    "history_ln = model_ln.fit(x_train, y_train, epochs=50, batch_size=32, validation_data=(x_val, y_val))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "# summarize history for accuracy\n",
    "plt.plot(history.history['loss'])\n",
    "plt.plot(history_ln.history['loss'])\n",
    "plt.title('model loss')\n",
    "plt.ylabel('loss')\n",
    "plt.xlabel('epoch')\n",
    "plt.legend(['history_vanilla loss','history_ln loss'], loc='upper right')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(history.history['acc'])\n",
    "plt.plot(history_ln.history['acc'])\n",
    "plt.title('model acc')\n",
    "plt.ylabel('loss')\n",
    "plt.xlabel('epoch')\n",
    "plt.legend(['history_vanilla acc','history_ln acc'], loc='lower right')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
